home *** CD-ROM | disk | FTP | other *** search
/ PD ROM 1 / PD ROM Volume I - Macintosh Software from BMUG (1988).iso / Stacks / Updates⁄New / TEXAS for BMUG / C progs / TEXAS XFCNs ƒ / buildIndexXFCN ƒ / merge_utils.z1.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-12-29  |  6.0 KB  |  269 lines  |  [TEXT/KAHL]

  1. /* mods 871211,22 for HyperCard XFCN work -- remove <stdio> stuff and
  2.  * go to the Mac toolbox and HC system ... ^z
  3.  */
  4.  
  5. /* file "merge_utils.c" ... 870902-... ^z
  6.  * misc. utilities for the merge_indices functions...
  7.  */
  8.  
  9. #include "buildIndex.1.h"
  10.  
  11. /* function to open an input key file for this generation and file number ...
  12.  * note the limitation to no more than 9 generations, which with a 4-way
  13.  * merge should be more than enough for a few years to come!  Note that
  14.  * this function should return 0 and not give up if it attempts to open
  15.  * a nonexistent file -- that's the signal for merge_indices() to know
  16.  * that all of the input files have been used up....
  17.  */
  18.  
  19. int open_inkfile (file_num, vRef0, generation_number)
  20.   int file_num, vRef0, generation_number;
  21.   {
  22.     Str255 fname;
  23.     int i;
  24.     
  25.     fname[1] = 'z';
  26.     fname[2] = generation_number + '0';
  27.     fname[3] = 'k';
  28.     i = putNum ((char *)fname + 4, file_num);
  29.     fname[0] = i + 3;
  30.     
  31.     if (FSOpen (fname, vRef0, &i) != noErr)
  32.         return (NULL);
  33.  
  34.     return (i);
  35.   }
  36.  
  37.  
  38. /* function to open an input ptr file for this generation and file number
  39.  */
  40.  
  41. int open_inpfile (file_num, vRef0, generation_number)
  42.   int file_num, vRef0, generation_number;
  43.   {
  44.     Str255 fname;
  45.     int i;
  46.     
  47.     fname[1] = 'z';
  48.     fname[2] = generation_number + '0';
  49.     fname[3] = 'p';
  50.     i = putNum ((char *)fname + 4, file_num);
  51.     fname[0] = i + 3;
  52.     
  53.     if (FSOpen (fname, vRef0, &i) != noErr)
  54.         return (NULL);
  55.  
  56.     return (i);
  57.   }
  58.  
  59.  
  60. /* function to open an output key file for this generation and file number
  61.  */
  62.  
  63. int open_outkfile (vRef0, generation_number, file_number)
  64.   int vRef0, generation_number, file_number;
  65.   {
  66.     Str255 fname;
  67.     int i;
  68.     
  69.     fname[1] = 'z';
  70.     fname[2] = generation_number + 1 + '0';
  71.     fname[3] = 'k';
  72.     i = putNum ((char *)fname + 4, file_number / NMERGE);
  73.     fname[0] = i + 3;
  74.     if (Create (fname, vRef0, '????', 'CTLZ') != noErr)
  75.       {
  76.         give_msg ("\pSorry, fatal error creating merge key file -- click mouse to exit, then reboot!");
  77.         beepWait ();
  78.           RestoreA4();
  79.         ExitToShell ();
  80.       }
  81.     
  82.     if (FSOpen (fname, vRef0, &i) != noErr)
  83.       {
  84.         give_msg ("\pSorry, fatal error opening merge key file -- click mouse to exit, then reboot!");
  85.         beepWait ();
  86.           RestoreA4();
  87.         ExitToShell ();
  88.       }
  89.  
  90.     return (i);
  91.   }
  92.  
  93.  
  94. /* function to open an output ptr file for this generation and file number
  95.  */
  96.  
  97. int open_outpfile (vRef0, generation_number, file_number)
  98.   int vRef0, generation_number, file_number;
  99.   {
  100.     Str255 fname;
  101.     int i;
  102.     
  103.     fname[1] = 'z';
  104.     fname[2] = generation_number + 1 + '0';
  105.     fname[3] = 'p';
  106.     i = putNum ((char *)fname + 4, file_number / NMERGE);
  107.     fname[0] = i + 3;
  108.     if (Create (fname, vRef0, '????', 'CTLZ') != noErr)
  109.       {
  110.         give_msg ("\pSorry, fatal error creating merge ptr file -- click mouse to exit, then reboot!");
  111.         beepWait ();
  112.           RestoreA4();
  113.         ExitToShell ();
  114.       }
  115.     
  116.     if (FSOpen (fname, vRef0, &i) != noErr)
  117.       {
  118.         give_msg ("\pSorry, fatal error opening merge ptr file -- click mouse to exit, then reboot!");
  119.         beepWait ();
  120.           RestoreA4();
  121.         ExitToShell ();
  122.       }
  123.  
  124.     return (i);
  125.   }
  126.  
  127.  
  128. /* function to rename the remaining last unpaired key file & ptr file
  129.  * from one generation to the next...
  130.  */
  131.  
  132. void fix_oddball_file_name (vRef0, generation_number, file_number)
  133.   int vRef0, generation_number, file_number;
  134.   {
  135.     Str255 oldname, newname;
  136.     int i;
  137.     
  138.     oldname[1] = 'z';
  139.     oldname[2] = generation_number + '0';
  140.     oldname[3] = 'k';
  141.     i = putNum ((char *)oldname + 4, file_number);
  142.     oldname[0] = i + 3;
  143.  
  144.     newname[1] = 'z';
  145.     newname[2] = generation_number + 1 + '0';
  146.     newname[3] = 'k';
  147.     i = putNum ((char *)newname + 4, file_number / NMERGE);
  148.     newname[0] = i + 3;
  149.     
  150.     if (Rename (oldname, vRef0, newname) != noErr)
  151.       {
  152.         give_msg ("\pSorry, error renaming merge key file ... click mouse to continue");
  153.         beepWait ();
  154.       }
  155.     
  156.     oldname[1] = 'z';
  157.     oldname[2] = generation_number + '0';
  158.     oldname[3] = 'p';
  159.     i = putNum ((char *)oldname + 4, file_number);
  160.     oldname[0] = i + 3;
  161.  
  162.     newname[1] = 'z';
  163.     newname[2] = generation_number + 1 + '0';
  164.     newname[3] = 'p';
  165.     i = putNum ((char *)newname + 4, file_number / NMERGE);
  166.     newname[0] = i + 3;
  167.     
  168.     if (Rename (oldname, vRef0, newname) != noErr)
  169.       {
  170.         give_msg ("\pSorry, error renaming merge ptr file ... click mouse to continue");
  171.         beepWait ();
  172.       }
  173.  
  174.     return;
  175.   }
  176.  
  177.  
  178. /* function to give the final key and ptr files their proper ultimate
  179.  * names ... ok for it to mess with doc_filename string....
  180.  */
  181.  
  182. void fix_final_file_names (doc_filename, vRef0, generation_number)
  183.   Str255 doc_filename;
  184.   int vRef0, generation_number;
  185.   {
  186.     Str255 oldname;
  187.     
  188.     oldname[0] = 4;
  189.     oldname[1] = 'z';
  190.     oldname[2] = generation_number + '0';
  191.     oldname[3] = 'k';
  192.     oldname[4] = '0';
  193.  
  194.     doc_filename[++doc_filename[0]] = '.';
  195.     doc_filename[++doc_filename[0]] = 'k';
  196.     
  197.     if (Rename (oldname, vRef0, doc_filename) != noErr)
  198.       {
  199.         give_msg ("\pSorry, error renaming final key file ... click mouse to continue");
  200.         beepWait ();
  201.       }
  202.  
  203.     oldname[3] = 'p';
  204.     doc_filename[doc_filename[0]] = 'p';
  205.  
  206.     if (Rename (oldname, vRef0, doc_filename) != noErr)
  207.       {
  208.         give_msg ("\pSorry, error renaming final ptr file ... click mouse to continue");
  209.         beepWait ();
  210.       }
  211.  
  212.     return;
  213.   }
  214.  
  215.  
  216. /* function to get rid of the superfluous k & p files now that they
  217.  * have been merged into the next generation....
  218.  */
  219.  
  220. void remove_used_infiles (n, vRef0, generation_number, file_number)
  221.   int n, vRef0, generation_number, file_number;
  222.   {
  223.     Str255 fname;
  224.     int i, j;
  225.     
  226.     fname[1] = 'z';
  227.     fname[2] = generation_number + '0';
  228.     for (i = 0; i < n; ++i)
  229.       {
  230.         fname[3] = 'k';
  231.         j = putNum ((char *)fname + 4, file_number + i);
  232.         fname[0] = j + 3;
  233.         
  234.         if (FSDelete (fname, vRef0) != noErr)
  235.           {
  236.             give_msg ("\pSorry, error deletin merge key file ... click mouse to continue");
  237.             beepWait ();
  238.           }
  239.  
  240.         fname[3] = 'p';
  241.         if (FSDelete (fname, vRef0) != noErr)
  242.           {
  243.             give_msg ("\pSorry, error deletin merge ptr file ... click mouse to continue");
  244.             beepWait ();
  245.           }
  246.       }
  247.     
  248.     return;
  249.   }
  250.  
  251.  
  252. /* function to close out the ink and inp files that have been opened...
  253.  */
  254.  
  255. void close_infiles (ink, inp, n)
  256.   int ink[], inp[];
  257.   int n;
  258.   {
  259.     int i;
  260.     
  261.     for (i = 0; i < n; ++i)
  262.       {
  263.         FSClose (ink[i]);
  264.         FSClose (inp[i]);
  265.       }
  266.   }
  267.  
  268.  
  269.